Utility Functions (ইউটিলিটি ফাংশনস)

Computer Programming - সি স্ট্যান্ডার্ড লাইব্রেরি রেফারেন্স (C Standard Library Reference)
242
242

Utility Functions (ইউটিলিটি ফাংশনস)

সি প্রোগ্রামিং ভাষায় ইউটিলিটি ফাংশনগুলো বিভিন্ন সাধারণ কাজ সম্পাদনের জন্য ব্যবহৃত হয়, যা প্রোগ্রামিংয়ে সাহায্যকারী হিসেবে কাজ করে। সি লাইব্রেরির stdlib.h এবং stddef.h হেডার ফাইলগুলোতে এই ফাংশনগুলো সংরক্ষিত থাকে। ইউটিলিটি ফাংশনগুলো সাধারণত কনভারশন, এলিমেন্ট খোঁজা, অ্যাবসোলিউট মান বের করা এবং র্যান্ডম সংখ্যা উৎপাদন ইত্যাদি কাজের জন্য ব্যবহৃত হয়।

নিচে সি প্রোগ্রামিংয়ের গুরুত্বপূর্ণ কিছু ইউটিলিটি ফাংশন এবং তাদের কাজ সম্পর্কে বিস্তারিত আলোচনা করা হলো:


১. abs() – অ্যাবসোলিউট মান নির্ধারণ

abs() ফাংশনটি একটি ইন্টিজার সংখ্যার অ্যাবসোলিউট মান (পজিটিভ মান) নির্ধারণ করে। এটি stdlib.h হেডার ফাইলের অন্তর্গত।

সিঙ্কট্যাক্স:

int abs(int x);

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int num = -10;
    printf("Absolute value of %d is %d\n", num, abs(num));
    return 0;
}

২. atoi() – স্ট্রিং থেকে ইন্টিজার কনভারশন

atoi() (ASCII to Integer) ফাংশনটি একটি স্ট্রিংকে ইন্টিজারে রূপান্তর করে। স্ট্রিংটি যদি পূর্ণসংখ্যায় রূপান্তরযোগ্য হয়, তাহলে এটি ইন্টিজার মান রিটার্ন করে; অন্যথায় এটি ০ রিটার্ন করে। এটি stdlib.h হেডার ফাইলের অন্তর্গত।

সিঙ্কট্যাক্স:

int atoi(const char *str);

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int main() {
    char str[] = "1234";
    int num = atoi(str);

    printf("The integer value is %d\n", num);
    return 0;
}

৩. atof() – স্ট্রিং থেকে ফ্লোট কনভারশন

atof() (ASCII to Float) ফাংশনটি একটি স্ট্রিংকে ফ্লোটিং পয়েন্ট সংখ্যায় রূপান্তর করে। এটি stdlib.h হেডার ফাইলের অন্তর্গত।

সিঙ্কট্যাক্স:

double atof(const char *str);

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int main() {
    char str[] = "12.34";
    double num = atof(str);

    printf("The float value is %.2f\n", num);
    return 0;
}

৪. rand() এবং srand() – র্যান্ডম সংখ্যা উৎপাদন

rand() ফাংশনটি একটি পসেটিভ র্যান্ডম সংখ্যা রিটার্ন করে, এবং srand() ফাংশনটি র্যান্ডম সংখ্যার সূচনা মান সেট করে। srand() ফাংশন ব্যবহার করে র্যান্ডম সংখ্যা উৎপাদনের সময় প্রতিবার আলাদা ফলাফল পাওয়া যায়।

সিঙ্কট্যাক্স:

int rand(void);
void srand(unsigned int seed);

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    srand(time(0));  // র্যান্ডম সংখ্যার সূচনা মান সেট করা

    printf("Random number: %d\n", rand());
    return 0;
}

৫. qsort() – কুইকসোর্ট অ্যালগরিদমের মাধ্যমে সর্টিং

qsort() ফাংশনটি কুইকসোর্ট অ্যালগরিদম ব্যবহার করে একটি অ্যারে সর্ট করে। এটি একটি জেনেরিক ফাংশন যা যে কোনো ধরনের অ্যারে সর্ট করতে পারে।

সিঙ্কট্যাক্স:

void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *));
  • base: অ্যারের প্রথম এলিমেন্টের পয়েন্টার।
  • nitems: অ্যারের এলিমেন্ট সংখ্যা।
  • size: প্রতিটি এলিমেন্টের সাইজ।
  • compar: একটি কম্পারেটর ফাংশন, যা তুলনা করতে ব্যবহৃত হয়।

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int compare(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);
}

int main() {
    int arr[] = {5, 3, 8, 6, 2};
    int n = sizeof(arr) / sizeof(arr[0]);

    qsort(arr, n, sizeof(int), compare);

    printf("Sorted array: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

৬. bsearch() – বাইনারি সার্চ

bsearch() ফাংশনটি একটি সর্ট করা অ্যারেতে বাইনারি সার্চ সম্পন্ন করে। এটি একটি এলিমেন্ট খুঁজে বের করতে দ্রুত কার্যকর।

সিঙ্কট্যাক্স:

void *bsearch(const void *key, const void *base, size_t nitems, size_t size, int (*compar)(const void *, const void *));
  • key: যে মানটি খোঁজা হচ্ছে।
  • base: অ্যারের প্রথম এলিমেন্টের পয়েন্টার।
  • nitems: অ্যারের এলিমেন্ট সংখ্যা।
  • size: প্রতিটি এলিমেন্টের সাইজ।
  • compar: একটি কম্পারেটর ফাংশন, যা তুলনা করতে ব্যবহৃত হয়।

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int compare(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);
}

int main() {
    int arr[] = {1, 2, 3, 4, 5};
    int n = sizeof(arr) / sizeof(arr[0]);
    int key = 3;

    int *found = (int *)bsearch(&key, arr, n, sizeof(int), compare);

    if (found != NULL) {
        printf("Element %d found at position %ld\n", key, found - arr);
    } else {
        printf("Element not found.\n");
    }

    return 0;
}

সারসংক্ষেপ

ফাংশনকাজ
abs()অ্যাবসোলিউট মান নির্ধারণ
atoi()স্ট্রিং থেকে ইন্টিজার রূপান্তর
atof()স্ট্রিং থেকে ফ্লোট রূপান্তর
rand()র্যান্ডম সংখ্যা উৎপাদন
srand()র্যান্ডম সংখ্যার সূচনা মান নির্ধারণ
qsort()কুইকসোর্ট অ্যালগরিদমের মাধ্যমে সর্টিং
bsearch()বাইনারি সার্চের মাধ্যমে এলিমেন্ট খোঁজা

এই ইউটিলিটি ফাংশনগুলো সি প্রোগ্রামে বিভিন্ন কাজ সহজে এবং দ্রুত সম্পন্ন করতে ব্যবহৃত হয়। এগুলো সাধারণ কাজের জন্য অত্যন্ত কার্যকর এবং প্রোগ্রামিংয়ের অনেক সময় বাঁচায়।

common.content_added_by

stdlib.h এর ইউটিলিটি ফাংশনসমূহ

213
213

stdlib.h এর ইউটিলিটি ফাংশনসমূহ

stdlib.h হেডার ফাইলটি সি প্রোগ্রামিং ভাষায় স্ট্যান্ডার্ড লাইব্রেরির বিভিন্ন ইউটিলিটি ফাংশন সরবরাহ করে। এই ফাংশনগুলো বিভিন্ন ধরনের কাজ সম্পাদন করতে ব্যবহৃত হয়, যেমন ডাইনামিক মেমোরি অ্যালোকেশন, টাইপ কাস্টিং, এলিমেন্ট সোর্টিং, সংখ্যার রূপান্তর, র্যান্ডম সংখ্যা উৎপাদন ইত্যাদি।

এখানে stdlib.h এর কিছু গুরুত্বপূর্ণ ইউটিলিটি ফাংশনের ব্যাখ্যা দেওয়া হলো:


১. atoi() – স্ট্রিং থেকে ইন্টিজার রূপান্তর

atoi() ফাংশনটি একটি স্ট্রিংকে ইন্টিজারে রূপান্তর করে। যদি স্ট্রিংয়ে বৈধ সংখ্যা থাকে, তবে এটি সংখ্যায় রূপান্তর করে।

সিঙ্কট্যাক্স:

int atoi(const char *str);

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int main() {
    char str[] = "123";
    int num = atoi(str);
    printf("Integer: %d\n", num);
    return 0;
}

২. atof() – স্ট্রিং থেকে ফ্লোট রূপান্তর

atof() ফাংশনটি একটি স্ট্রিংকে ফ্লোটিং পয়েন্ট সংখ্যায় রূপান্তর করে।

সিঙ্কট্যাক্স:

double atof(const char *str);

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int main() {
    char str[] = "3.14159";
    double num = atof(str);
    printf("Float: %lf\n", num);
    return 0;
}

৩. atol() এবং atoll() – স্ট্রিং থেকে লং ইন্টিজার এবং লং লং ইন্টিজার রূপান্তর

atol() এবং atoll() ফাংশনগুলো স্ট্রিংকে যথাক্রমে long এবং long long ইন্টিজারে রূপান্তর করে।

সিঙ্কট্যাক্স:

long int atol(const char *str);
long long int atoll(const char *str);

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int main() {
    char str[] = "123456";
    long int num = atol(str);
    printf("Long int: %ld\n", num);
    return 0;
}

৪. rand() – র্যান্ডম সংখ্যা তৈরি

rand() ফাংশনটি র্যান্ডম সংখ্যা তৈরি করতে ব্যবহৃত হয়। এটি ০ থেকে RAND_MAX পর্যন্ত একটি সংখ্যা রিটার্ন করে।

সিঙ্কট্যাক্স:

int rand(void);

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int main() {
    printf("Random number: %d\n", rand());
    return 0;
}

বিঃদ্রঃ: র্যান্ডম সংখ্যা সিড সেট করার জন্য srand() ফাংশনটি ব্যবহার করা হয়।


৫. srand() – র্যান্ডম সংখ্যা সিড সেট করা

srand() ফাংশনটি rand() ফাংশনের জন্য একটি সিড (seed) সেট করে, যা প্রতিবার আলাদা র্যান্ডম সংখ্যা উৎপন্ন করতে সহায়ক।

সিঙ্কট্যাক্স:

void srand(unsigned int seed);

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    srand(time(0));  // সিড হিসেবে বর্তমান সময় ব্যবহার করা
    printf("Random number: %d\n", rand());
    return 0;
}

৬. abs() – ইন্টিজারের অ্যাবসোলিউট মান নির্ণয়

abs() ফাংশনটি একটি ইন্টিজার সংখ্যার অ্যাবসোলিউট মান নির্ণয় করতে ব্যবহৃত হয়।

সিঙ্কট্যাক্স:

int abs(int n);

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int num = -10;
    printf("Absolute value: %d\n", abs(num));
    return 0;
}

৭. labs() এবং llabs() – লং এবং লং লং ইন্টিজারের অ্যাবসোলিউট মান নির্ণয়

labs() এবং llabs() ফাংশনগুলো যথাক্রমে long এবং long long ইন্টিজারের অ্যাবসোলিউট মান নির্ণয় করতে ব্যবহৃত হয়।

সিঙ্কট্যাক্স:

long int labs(long int n);
long long int llabs(long long int n);

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int main() {
    long int num = -123456;
    printf("Absolute long int value: %ld\n", labs(num));
    return 0;
}

৮. qsort() – এলিমেন্ট সোর্ট করা

qsort() ফাংশনটি একটি এরে বা ডেটা এলিমেন্টকে দ্রুত (quick sort) পদ্ধতিতে সজ্জিত করতে ব্যবহৃত হয়। এটি যে কোন ধরনের ডেটা টাইপের সাথে কাজ করতে পারে।

সিঙ্কট্যাক্স:

void qsort(void *base, size_t num, size_t size, int (*compar)(const void *, const void *));

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int compare(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);
}

int main() {
    int arr[] = {5, 2, 8, 1, 4};
    int n = sizeof(arr) / sizeof(arr[0]);

    qsort(arr, n, sizeof(int), compare);

    printf("Sorted array: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

৯. bsearch() – বাইনারি সার্চ

bsearch() ফাংশনটি একটি সজ্জিত (sorted) এরে থেকে একটি নির্দিষ্ট এলিমেন্ট খুঁজে বের করতে ব্যবহৃত হয়। এটি বাইনারি সার্চ অ্যালগরিদম ব্যবহার করে কাজ করে।

সিঙ্কট্যাক্স:

void *bsearch(const void *key, const void *base, size_t num, size_t size, int (*compar)(const void *, const void *));

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int compare(const void *a, const void *b) {
    return (*(int *)a - *(int *)b);
}

int main() {
    int arr[] = {1, 2, 4, 5, 8};
    int n = sizeof(arr) / sizeof(arr[0]);
    int key = 4;

    int *item = (int *)bsearch(&key, arr, n, sizeof(int), compare);

    if (item != NULL) {
        printf("Element found: %d\n", *item);
    } else {
        printf("Element not found\n");
    }
    return 0;
}

সারসংক্ষেপ

ফাংশনকাজউদাহরণ
atoi()স্ট্রিং থেকে ইন্টিজারে রূপান্তরatoi("123");
atof()স্ট্রিং থেকে ফ্লোটে রূপান্তরatof("3.14");
atol()স্ট্রিং থেকে লং ইন্টিজারে রূপান্তরatol("123456");
rand()র্যান্ডম সংখ্যা তৈরিrand();
srand()র্যান্ডম সংখ্যা সিড সেট করাsrand(time(0));
abs()ইন্টিজারের অ্যাবসোলিউট মান নির্ণয়abs(-10);
qsort()এলিমেন্ট সজ্জিত (সোর্ট) করাqsort(arr, n, sizeof(int), compare);
bsearch()বাইনারি সার্চbsearch(&key, arr, n, sizeof(int), compare);

stdlib.h এর এই ইউটিলিটি ফাংশনগুলো সি প্রোগ্রামিংয়ে বিভিন্ন ধরনের কার্যকর কাজ সম্পাদন করতে সহায়ক, যেমন ডেটা রূপান্তর, মেমোরি ম্যানেজমেন্ট, র্যান্ডম সংখ্যা উৎপাদন, এবং সঠিকভাবে ডেটা সার্চ ও সজ্জিতকরণ।

common.content_added_by

atoi(), atof(), atol() এর মাধ্যমে ডেটা টাইপ কনভার্সন

198
198

atoi(), atof(), এবং atol() এর মাধ্যমে ডেটা টাইপ কনভার্সন

সি প্রোগ্রামিং ভাষায় atoi(), atof(), এবং atol() ফাংশনগুলো স্ট্রিং থেকে নির্দিষ্ট ডেটা টাইপে মান কনভার্ট করতে ব্যবহৃত হয়। এই ফাংশনগুলো মূলত <stdlib.h> হেডার ফাইলে সংজ্ঞায়িত এবং এগুলো ইনপুট স্ট্রিংকে ইন্টিজার, ফ্লোট বা লং টাইপে কনভার্ট করতে সহায়ক।

নিচে atoi(), atof(), এবং atol() এর ব্যবহার এবং তাদের কার্যকারিতা বিস্তারিতভাবে আলোচনা করা হলো।


১. atoi() – স্ট্রিং থেকে ইন্টিজার কনভার্সন

atoi() ফাংশনটি একটি স্ট্রিংকে ইন্টিজার (integer) টাইপে কনভার্ট করে। এটি একটি স্ট্রিং ইনপুট নিয়ে সংখ্যার অংশটি রিটার্ন করে এবং অপ্রাসঙ্গিক অংশ (যেমন, অক্ষর) উপেক্ষা করে। যদি স্ট্রিংটি একটি বৈধ সংখ্যার প্রতিনিধিত্ব না করে, তবে এটি 0 রিটার্ন করবে।

সিঙ্কট্যাক্স:

int atoi(const char *str);
  • str – স্ট্রিং যা ইন্টিজারে কনভার্ট করতে হবে।

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int main() {
    char str[] = "12345";
    int num = atoi(str);  // স্ট্রিং থেকে ইন্টিজারে কনভার্ট

    printf("The integer value is: %d\n", num);
    return 0;
}

এখানে atoi("12345") ফাংশনটি স্ট্রিং "12345" থেকে ইন্টিজার 12345 রিটার্ন করবে।


২. atof() – স্ট্রিং থেকে ফ্লোট কনভার্সন

atof() ফাংশনটি একটি স্ট্রিংকে ফ্লোট (floating-point number) টাইপে কনভার্ট করে। এটি স্ট্রিংয়ের প্রথম সংখ্যার অংশটিকে ফ্লোটে কনভার্ট করে, এবং যদি স্ট্রিংটি একটি বৈধ ফ্লোট সংখ্যা না হয়, তবে এটি 0.0 রিটার্ন করবে।

সিঙ্কট্যাক্স:

double atof(const char *str);
  • str – স্ট্রিং যা ফ্লোটে কনভার্ট করতে হবে।

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int main() {
    char str[] = "123.45";
    double num = atof(str);  // স্ট্রিং থেকে ফ্লোটে কনভার্ট

    printf("The float value is: %.2f\n", num);
    return 0;
}

এখানে atof("123.45") ফাংশনটি স্ট্রিং "123.45" থেকে ফ্লোট 123.45 রিটার্ন করবে।


৩. atol() – স্ট্রিং থেকে লং ইন্টিজার কনভার্সন

atol() ফাংশনটি একটি স্ট্রিংকে লং ইন্টিজার (long integer) টাইপে কনভার্ট করে। এটি atoi() এর মতোই কাজ করে, তবে এটি বড় সংখ্যাগুলোর জন্য ব্যবহৃত হয়, কারণ এটি ইন্টিজারের চেয়ে বড় সংখ্যা ধারণ করতে সক্ষম।

সিঙ্কট্যাক্স:

long atol(const char *str);
  • str – স্ট্রিং যা লং ইন্টিজারে কনভার্ট করতে হবে।

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int main() {
    char str[] = "1234567890";
    long num = atol(str);  // স্ট্রিং থেকে লং ইন্টিজারে কনভার্ট

    printf("The long integer value is: %ld\n", num);
    return 0;
}

এখানে atol("1234567890") ফাংশনটি স্ট্রিং "1234567890" থেকে লং ইন্টিজার 1234567890 রিটার্ন করবে।


পার্থক্য

ফাংশনকাজরিটার্ন টাইপউদাহরণ
atoi()স্ট্রিং থেকে ইন্টিজার কনভার্টint"123" → 123
atof()স্ট্রিং থেকে ফ্লোট কনভার্টdouble"123.45" → 123.45
atol()স্ট্রিং থেকে লং ইন্টিজার কনভার্টlong"1234567890" → 1234567890

সারসংক্ষেপ

  • atoi() স্ট্রিংকে ইন্টিজারে কনভার্ট করতে ব্যবহৃত হয় এবং এটি ইনপুট স্ট্রিংটি ইন্টিজারে রূপান্তর করে।
  • atof() স্ট্রিংকে ফ্লোটে কনভার্ট করে এবং এটি ডেসিমাল পয়েন্ট সংখ্যাগুলি সঠিকভাবে রূপান্তর করে।
  • atol() স্ট্রিংকে লং ইন্টিজারে কনভার্ট করতে ব্যবহৃত হয়, যা বড় সংখ্যাগুলির জন্য ব্যবহৃত হয়।

এই ফাংশনগুলো stdlib.h হেডার ফাইলে সংজ্ঞায়িত এবং প্রোগ্রামে স্ট্রিং ডেটা টাইপের কনভার্সন করার জন্য খুবই উপকারী।

common.content_added_by

rand(), srand() এর মাধ্যমে র‍্যান্ডম নাম্বার জেনারেশন

228
228

rand() এবং srand() এর মাধ্যমে র‍্যান্ডম নাম্বার জেনারেশন

সি প্রোগ্রামিং ভাষায় rand() এবং srand() ফাংশনগুলি র‍্যান্ডম নাম্বার জেনারেশনের জন্য ব্যবহৃত হয়। rand() ফাংশন একটি পসিবল র‍্যান্ডম নাম্বার উৎপন্ন করে, এবং srand() ফাংশনটি র‍্যান্ডম নাম্বার জেনারেটরের বীজ (seed) সেট করে, যাতে র‍্যান্ডম নাম্বারগুলি প্রতি চালনার সময় আলাদা আলাদা হয়। সাধারণভাবে, র‍্যান্ডম নাম্বারগুলি অনেক ধরনের সিমুলেশন, গেম, বা পরীক্ষামূলক কাজে ব্যবহৃত হয়।

সিঙ্কট্যাক্স:

  1. rand():

    int rand(void);
  • এটি একটি পসিবল র‍্যান্ডম নাম্বার রিটার্ন করে।
  • সাধারণত, এটি 0 থেকে RAND_MAX পর্যন্ত একটি সংখ্যা রিটার্ন করে।
  1. srand():

    void srand(unsigned int seed);
  • এটি র‍্যান্ডম নাম্বার জেনারেটরের বীজ (seed) সেট করে। সাধারণত time() ফাংশন থেকে সিড নেয়া হয়, যাতে প্রতিবার আলাদা র‍্যান্ডম নাম্বার উৎপন্ন হয়।

উদাহরণ: rand() এবং srand() ব্যবহার

১. র‍্যান্ডম নাম্বার জেনারেশন (বীজ ছাড়া)

যদি আপনি শুধুমাত্র rand() ফাংশন ব্যবহার করেন, তাহলে প্রতিবার প্রোগ্রামটি চালানোর সময় একই র‍্যান্ডম নাম্বার উৎপন্ন হবে, কারণ র‍্যান্ডম জেনারেটরের বীজ একটিই থাকে। এটি সাধারণত পূর্বনির্ধারিত থাকে।

#include <stdio.h>
#include <stdlib.h>

int main() {
    int random_number;

    // র‍্যান্ডম নাম্বার জেনারেশন
    random_number = rand();
    printf("Random number: %d\n", random_number);

    return 0;
}

এখানে, rand() একটি পসিবল র‍্যান্ডম নাম্বার রিটার্ন করবে, কিন্তু প্রতিবার প্রোগ্রাম চালানোর সময় একই নাম্বার আসবে।


২. srand() এবং rand() ব্যবহার (অলাদা র‍্যান্ডম নাম্বার)

যদি আপনি চাইছেন যে, প্রতিবার প্রোগ্রাম চালানোর সময় ভিন্ন ভিন্ন র‍্যান্ডম নাম্বার তৈরি হোক, তবে আপনাকে srand() ফাংশন ব্যবহার করতে হবে। srand() এর মাধ্যমে আপনি র‍্যান্ডম নাম্বার জেনারেটরের বীজ সেট করেন, এবং সাধারণত time(NULL) ব্যবহার করা হয় যা সিস্টেমের বর্তমান সময় দেয়। এতে প্রতিবার প্রোগ্রাম চালানোর সময় একটি নতুন সিড তৈরি হয় এবং ভিন্ন ভিন্ন র‍্যান্ডম নাম্বার পাওয়া যায়।

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    int random_number;

    // র‍্যান্ডম নাম্বার জেনারেটরের বীজ সেট করা
    srand(time(NULL));  // বর্তমান সময় দিয়ে সিড সেট করা

    // র‍্যান্ডম নাম্বার জেনারেশন
    random_number = rand();
    printf("Random number: %d\n", random_number);

    return 0;
}

এখানে time(NULL) বর্তমান সময়ের সেকেন্ড মান দিচ্ছে এবং সেটি srand() ফাংশনে সিড হিসেবে ব্যবহৃত হচ্ছে। এর ফলে প্রতিবার প্রোগ্রাম চালানোর সময় আলাদা আলাদা র‍্যান্ডম নাম্বার উৎপন্ন হবে।

র‍্যান্ডম নাম্বারকে একটি সীমার মধ্যে সীমাবদ্ধ করা

আপনি rand() ফাংশন থেকে যে র‍্যান্ডম নাম্বারটি পাচ্ছেন তা 0 থেকে RAND_MAX পর্যন্ত হতে পারে। তবে আপনি যদি একটি নির্দিষ্ট সীমার মধ্যে র‍্যান্ডম নাম্বার চান, তবে সেটি করতে পারেন:

উদাহরণ: 1 থেকে 100 এর মধ্যে র‍্যান্ডম নাম্বার তৈরি

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    int random_number;

    // র‍্যান্ডম নাম্বার জেনারেটরের বীজ সেট করা
    srand(time(NULL));

    // 1 থেকে 100 এর মধ্যে র‍্যান্ডম নাম্বার জেনারেশন
    random_number = (rand() % 100) + 1;

    printf("Random number between 1 and 100: %d\n", random_number);

    return 0;
}

এখানে rand() % 100 দিয়ে 0 থেকে 99 এর মধ্যে একটি নাম্বার তৈরি হবে, তারপর +1 করে সেটি 1 থেকে 100 এর মধ্যে র‍্যান্ডম নাম্বার তৈরি হবে।

সারসংক্ষেপ

ফাংশনবর্ণনাসিঙ্কট্যাক্স
rand()র‍্যান্ডম নাম্বার জেনারেট করে।int rand(void);
srand()র‍্যান্ডম নাম্বার জেনারেটরের বীজ সেট করেvoid srand(unsigned int seed);
  • rand() ফাংশনটি র‍্যান্ডম নাম্বার তৈরি করে, তবে এটি একই সিডের সাথে প্রতি চালনায় একই নাম্বার দিতে পারে।
  • srand() ফাংশনটি র‍্যান্ডম নাম্বার জেনারেটরের সিড সেট করে এবং সাধারণত time(NULL) ব্যবহার করা হয়, যাতে প্রতি চালনায় আলাদা র‍্যান্ডম নাম্বার তৈরি হয়।
  • র‍্যান্ডম নাম্বার একটি নির্দিষ্ট সীমার মধ্যে সীমাবদ্ধ করতে rand() % n ব্যবহার করা হয়।
common.content_added_by

system() ফাংশন এবং তার ব্যবহার

209
209

system() ফাংশন এবং তার ব্যবহার

সি প্রোগ্রামিংয়ে system() ফাংশনটি একটি বাইরের কমান্ড বা প্রোগ্রাম চালানোর জন্য ব্যবহৃত হয়। এটি stdlib.h হেডার ফাইলে সংজ্ঞায়িত এবং অপারেটিং সিস্টেমের শেলের মাধ্যমে কমান্ড চালানোর অনুমতি দেয়। system() ফাংশনটি সাধারণত প্রোগ্রামিংয়ে বাইরের কমান্ড বা স্ক্রিপ্ট চালানোর জন্য ব্যবহার করা হয়।

সিঙ্কট্যাক্স:

int system(const char *command);
  • command – যেকোনো শেল কমান্ড বা প্রোগ্রাম যা আপনি চালাতে চান।
  • ফাংশনটি সফলভাবে কমান্ড চালালে 0 রিটার্ন করে এবং যদি কোনো ত্রুটি ঘটে তবে এটি -1 রিটার্ন করে।

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int main() {
    // শেল কমান্ড চালানো
    int return_value = system("ls");  // UNIX/Linux এর জন্য ফাইলের তালিকা দেখানো

    if (return_value == -1) {
        printf("Error executing the command.\n");
    }

    return 0;
}

এখানে system() ফাংশনটি ls কমান্ড চালিয়েছে (যা UNIX/Linux সিস্টেমে ব্যবহৃত হয়) এবং কমান্ডের আউটপুট কনসোলে প্রদর্শিত হবে।


system() ফাংশনের ব্যবহার

১. বাইরের শেল কমান্ড চালানো

system() ফাংশনটি ব্যবহার করে আপনি সিস্টেমের শেলে যেকোনো কমান্ড চালাতে পারেন, যেমন ফাইল পরিচালনা, ডিরেক্টরি তালিকা দেখা, প্রোগ্রাম চালানো ইত্যাদি।

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int main() {
    // কমান্ড প্রম্পটের মাধ্যমে ফোল্ডারের ফাইল তালিকা বের করা
    system("dir");  // উইন্ডোজ সিস্টেমে
    // অথবা
    // system("ls");  // UNIX/Linux সিস্টেমে

    return 0;
}

এখানে system() ফাংশনটি dir (উইন্ডোজ) বা ls (UNIX/Linux) কমান্ড চালিয়েছে, যা সংশ্লিষ্ট সিস্টেমের ডিরেক্টরির ফাইল তালিকা দেখাবে।


২. একটি প্রোগ্রাম চালানো

system() ফাংশনটি বাইরের প্রোগ্রাম বা স্ক্রিপ্ট চালানোর জন্যও ব্যবহার করা যেতে পারে।

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int main() {
    // একটি বাইরের প্রোগ্রাম চালানো
    system("python --version");  // পাইথন ভার্সন চেক করা

    return 0;
}

এখানে system() ফাংশনটি বাইরের Python প্রোগ্রাম চালিয়ে তার ভার্সন চেক করবে।


৩. অপারেটিং সিস্টেমের স্ক্রিপ্ট চালানো

system() ফাংশনটি শেল স্ক্রিপ্ট চালাতে ব্যবহার করা যেতে পারে, যা সাধারণত সিস্টেম প্রশাসন বা অন্যান্য অটোমেশন কাজের জন্য ব্যবহৃত হয়।

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int main() {
    // শেল স্ক্রিপ্ট চালানো
    system("./backup.sh");  // Linux/macOS এ backup.sh স্ক্রিপ্ট চালানো

    return 0;
}

এখানে system() ফাংশনটি backup.sh শেল স্ক্রিপ্ট চালিয়েছে।


system() ফাংশনের রিটার্ন ভ্যালু

  • 0: কমান্ড সফলভাবে সম্পন্ন হয়েছে।
  • -1: কমান্ড চালানোর সময় কোনো ত্রুটি হয়েছে।

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int return_value;

    return_value = system("ls");  // কমান্ড চালানো

    if (return_value == -1) {
        printf("Error executing the command.\n");
    } else {
        printf("Command executed successfully.\n");
    }

    return 0;
}

এখানে system() ফাংশনের রিটার্ন ভ্যালু চেক করে এটি নিশ্চিত করা হয়েছে যে কমান্ডটি সফলভাবে চালানো হয়েছে নাকি কোনো সমস্যা ঘটেছে।


নিরাপত্তা সতর্কতা

  • system() ফাংশনটি বাইরের কমান্ড চালানোর জন্য ব্যবহৃত হয়, তাই এটি সতর্কতার সাথে ব্যবহার করা উচিত। বিশেষত যদি ব্যবহারকারী ইনপুট কমান্ড হিসেবে দেওয়ার মাধ্যমে বাইরের শেলের কমান্ড চালানোর সুযোগ থাকে (যেমন ওয়েব অ্যাপ্লিকেশন), তবে এটি কমান্ড ইনজেকশন আক্রমণের সুযোগ সৃষ্টি করতে পারে।
  • তাই যখন system() ব্যবহার করেন, তখন ইনপুট যাচাই করা এবং শেলের কমান্ডের নিরাপত্তা সম্পর্কে সচেতন থাকা গুরুত্বপূর্ণ।

সারসংক্ষেপ

ফাংশনকাজসিঙ্কট্যাক্স
system()বাইরের শেল কমান্ড বা প্রোগ্রাম চালায়int system(const char *command);

system() ফাংশনটি বাইরের কমান্ড বা প্রোগ্রাম চালানোর জন্য খুবই উপযোগী, তবে এটি নিরাপত্তা ঝুঁকির সৃষ্টি করতে পারে, তাই এটি ব্যবহার করার সময় সতর্ক থাকা উচিত।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion